<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

// 查询构造器
class queryConstruController extends Controller{

    // 新增数据
    public function insertConstru(){

    //    $bool=DB::table("smbms_user")->insert([
    //         "userName"=>"laravel3",
    //         "userPassword"=>"1234567",
    //         "address"=>"sdaasdasds"
    //     ]);
    //     var_dump($bool);
        //如果想获得新增后的id则把insert()换成insertGetId()
        // $bool2=DB::table("smbms_user")->insert([
        //     "userName"=>"laravel3",
        //     "userPassword"=>"1234567",
        //     "address"=>"sdaasdasds"
        // ]);
        // var_dump($bool2);

        // 插入多条数组只需要将insert的第二个参数换成二维数组即可
        $bool2=DB::table("smbms_user")->insert([
            ["userName"=>"laravel3","userPassword"=>"1234567"],
            ["userName"=>"laravel3","userPassword"=>"1234567"],
            ["userName"=>"laravel3","userPassword"=>"1234567"]
        ]);
        var_dump($bool2);
    }
    //更新数据
    public function updatetConstru($id=""){

    //    return DB::table("smbms_user")
    //     // 加上限定条件where，第一个参数限定字段，第二个参数限定字段条件
    //     ->where("id",$id)
    //     ->update([
    //         "userCode"=>"laravel3"
    //     ]);

        // 自增increment(需要自增的字段，需要自增的step)第二个参数默认为1
        // return DB::table("smbms_user")
        // ->where("id",$id)
        // ->increment("userRole",2);

        // 自减
        //自减increment(需要自减的字段，需要自减的step),第二个参数默认为1
        //同时也能为自增设置限定条件where
        // 同时也能在自增的同时修改其他字段,在decrement第三个参数加入由字段和值组成的数组即可
        return DB::table("smbms_user")
        ->where("id",$id)
        ->decrement("userRole",2,["address"=>"qazwsxedc"]);
    }

    // 删除数据
    public function deleteConstru($id=""){
        // 删除数据一定要加where函数加上限定条件，不然整个表都没了
        // DB::table("smbms_user")
        // ->where("id",$id)
        // ->delete();

        // 删除数据一定要加where函数加上限定条件，不然整个表都没了
        // 删除多条数据只需要加一段条件符号即可
        DB::table("smbms_user")
        ->where("id",">",$id)
        ->delete();

        // 截断表
        // DB::table("smbms_user");
        // -truncate();
    }

    // 查询数据
    public function queryConstru($id=""){

        // 获取表的所有数据
        // $users=DB::table("smbms_user")->get();
        // dd($users);

        // 获取表的一条数据
        //加上orderBy()函数可以规定排序规则,第一个参数设置排序字段，第二个参数设置排序规则
        // $user=DB::table("smbms_user")
        // ->orderBy("id","desc")
        // ->first();
        // dd($user);

         //where多个限制条件的写法，将where换成whereRaw()
        //whereRaw()函数第一个参数写带占位符的限制条件，第二个参数放数组存有与占位符对应的条件
        //  $users=DB::table("smbms_user")
        // ->whereRaw("id>? and gender=?",[$id,2])
        // ->get();
        // dd($users);

        // 获得每行数据的一个字段的数据pluck()
        //如果只想获得每行数据的一个字段，需要将get函数换成pluck(),并传入需要的字段名称
        // 第二个参数是将每条数据的哪个字段的值（默认为索引数组，
        //作为每条指定字段值的键，形成一个一维数组
        // $users=DB::table("smbms_user")
        // ->whereRaw("id>? and gender=?",[$id,2])
        // ->pluck("address","userName");
        // dd($users);

        // 选择获得每行数据的哪些字段返回select()
        //加上此函数可以限定哪些字段返回
        // $users=DB::table("smbms_user")
        // ->select("id","userName","userPassword","address")
        // ->get();
        // dd($users);

        // 查询表数据，但是只返回规定的记录条数，每返回一次都会调用一次次个参数的回调函数，直至表数据查询完毕
        // 如下规定每次查询返回两条记录，每返回一次都会调用一次次个参数的回调函数
        // 每次返回的两条记录以数组的形式传递给回调函数中的形参，可以直接使用。
        echo "<pre>";
        DB::table("smbms_user")->chunk(2,function($users){
            var_dump($users);
        });

    }

    // 聚合函数
    public function query5(){

        // 计算记录总条数count()
        // $num=DB::table("smbms_user")->count();
        
        // 求最大的数据,max()
        // 参数设置比较的字段
        // $num=DB::table("smbms_user")->max("userRole");

        // 求最小的数据,min()
        // 参数设置比较的字段
        // $num=DB::table("smbms_user")->min("userRole");

        // 求平均数avg()
        // 参数设置求平均的字段
        // $num=DB::table("smbms_user")->avg("userRole");

        // 求和asum()
        // 参数设置求和的字段
        // $num=DB::table("smbms_user")->sum("userRole");
        var_dump($num);

    }
}